package com.fire.chat.entity.vo;

import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.util.List;
import java.util.Set;

/**
 * @program: hxzq
 * @description: 菜单树形结构视图对象
 * @author: xjr
 * @create: 2020-11-04 17:49
 **/
@Data
@NoArgsConstructor
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class SysMenuVO implements Serializable {

    /**
     * 主键
     */
    @ApiModelProperty("菜单id")
    private Long id;

    /**
     * 名称
     */
    @ApiModelProperty("菜单名字")
    private String name;

    /**
     * 菜单编码
     */
    @ApiModelProperty("菜单资源")
    private String menuCode;

    /**
     * 父节点
     */
    @ApiModelProperty("父资源id")
    private Long parentId;

    /**
     * 节点类型，1文件夹，2页面，3按钮
     */
    @ApiModelProperty("节点类型 1文件夹，2页面，3按钮")
    private Integer nodeType;

    /**
     * 图标地址
     */
    @ApiModelProperty("图标地址")
    private String iconUrl;

    /**
     * 排序号
     */
    @ApiModelProperty("排序号")
    private Integer sort;

    /**
     * 页面对应的地址
     */
    @ApiModelProperty("页面路由地址")
    private String linkUrl;

    /**
     * 层次
     */
    @ApiModelProperty("菜单层级")
    private Integer level;

    /**
     * 接口访问地址,一般针对nodetype为3时的按钮才会有
     */
    @ApiModelProperty("接口访问地址")
    private String path;

    /**
     * 子菜单集合
     */
    @ApiModelProperty("子菜单集合")
    List<SysMenuVO> childMenu;

    public void addPath(Set<String> source){
        source.add(this.menuCode);
        if (CollectionUtils.isNotEmpty(this.getChildMenu())){
            for (SysMenuVO menu : this.getChildMenu()) {
                menu.addPath(source);
            }
        }
    }
}
